package com.sxj.corejava.code06_lambda表达式;

import com.sxj.corejava.entity.User;

import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/23日 9:48
 */
public class Test08_构造方法引用 {

    public static void main(String[] args) {
        // User user = new User();
        // 在Lambda表达式中,通过类名::new的方式来引用构造方法
        // 调用无参构造方法,无参有返回值
        Supplier<User> s = User::new;
        User user = s.get();
        System.out.println(user);

        // 调用单参数构造方法,有参有返回值
        Function<String, User> f = User::new;
        User user2 = f.apply("admin");
        System.out.println(user2);

        // 调用两个参数的构造方法,两个参数有返回值
        // 在常用的四大函数式接口中没有对应方法
        // 可以使用BiFunction<T, U, R>函数式接口
        // 接口方法:R apply(T t, U u)
        BiFunction<String, String, User> bf = User::new;
        User user3 = bf.apply("admin", "123456");
        System.out.println(user3);

        // 如果遇到更多参数的,选择对应的函数式接口即可
        // 如果没有对应的函数式接口,可以自定义
    }

}
